<?php

class DateHelper {
	
	static $monthes_array = array('1'=>'Январь','2'=>'Февраль','3'=>'Март','4'=>'Апрель','5'=>'Май','6'=>'Июнь','7'=>'Июль','8'=>'Август','9'=>'Сентябрь','10'=>'Октябрь','11'=>'Ноябрь','12'=>'Декабрь');
	static $monthes_array2 = array('1'=>'января','2'=>'февраля','3'=>'марта','4'=>'апреля','5'=>'мая','6'=>'июня','7'=>'июля','8'=>'августа','9'=>'сентября','10'=>'октября','11'=>'ноября','12'=>'декабря');
	static $weekday_array = array('1'=>'понедельник','2'=>'вторник','3'=>'среда','4'=>'четверг','5'=>'пятница','6'=>'суббота','7'=>'воскресенье');
	static $weekday_short_array = array('1'=>'пн','2'=>'вт','3'=>'ср','4'=>'чт','5'=>'пт','6'=>'сб','7'=>'вс');
	
	
	static function getMonthes()
	{
		return self::$monthes_array;
	}
	
	static function getMonthes2()
	{
		return self::$monthes_array2;
	}
	
	function getMonthName($month)
	{
		return self::$monthes_array[''.$month];
	}
	
	static function getMonthName2($month)
	{
		return self::$monthes_array2[''.$month];
	}
	
	static function sql2dt($str)
	{
		list($y, $m, $d) = explode('-',$str);
		return mktime(0, 0, 0, $m, $d, $y);
	}
	
	static function dt2sql($dt)
	{
		return date("Y-m-d", $dt);
	}
	
	
	static function isWeekend($dt)
	{
		$wd = getWeekDay($dt);
		if($wd==6 || $wd==7) return true;
		return false;
	}
	
	// функция возвращает разницу в годах, месяцах, днях между двумя датами
	// разница - календарная, например - для вычисления возраста
	static function diff($dt1, $dt2=0)
	{
		if(!$dt2) $dt2 = time();
		
		if($dt1 > $dt2)
		{
			$temp_dt = $dt2;
			$dt2     = $dt1;
			$dt1     = $temp_dt;
		}
		
		$date1 = date("Y-n-j", $dt1);
		list($year1, $month1, $day1) = explode('-',$date1);
		$month_days1 = date( "t", $dt1);
		
		$date2 = date("Y-n-j", $dt2);
		list($year2, $month2, $day2) = explode('-',$date2);
		$month_days2 = date( "t", $dt2);
		
		if($date1 == $date2)
		{
			return Array("d"=>0, "m"=>0, "y"=>0);
		}
		
		$month1 = intval($month1);
		$month2 = intval($month2);
		$day1   = intval($day1);
		$day2   = intval($day2);
		$year1  = intval($year1);
		$year2  = intval($year2);
		
    if($month2 > $month1)
    {
       $yy = $year2 - $year1;
			 
			 if($day2 >= $day1)
			 {
			 	$mm = $month2 - $month1;
				$dd = $day2 - $day1;
			 }
			 else
			 {
 	       $mm = $month2 - $month1 - 1;
				 $dd = $month_days1 - $day1 + $day2;
			 }
    }
		
    if($month2 < $month1)
    {
        $yy = $year2 - $year1 - 1;
        
        if($day2 >= $day1)
        {
        	$mm = (12-$month1) + $month2;
          $dd = $day2 - $day1;
        }
        else
        {
					$mm = (12-$month1) + $month2 - 1;
        	$dd = $month_days1 - $day1 + $day2;
        }
    }
		
    if($month2 == $month1)
    {
        if($day2 >= $day1)
        {
            $yy = $year2 - $year1;
            $mm = 0;
            $dd = $day2 - $day1;
        }
        if($day2 < $day1)
        {
            $yy = $year2 - $year1 - 1;
            $mm = 11;
            $dd = $day2 - $day1;
        }
    }
		
		return Array("d"=>$dd, "m"=>$mm, "y"=>$yy);
	}
	
	
	static function fancyDate($dt)
	{
		$year = intval(date("Y",$dt));
		$month = intval(date("n",$dt));
		$day = intval(date("j",$dt));
		$dayOfYear = intval(date("z",$dt));
		$weekOfYear = intval(date("W",$dt));
		$hour = date("G",$dt);
		$minute = date("i",$dt);
		
		$cyear = intval(date("Y"));
		$cweek = intval(date("W"));
		$cday = intval(date("z"));
		
		if($dayOfYear==$cday && $year==$cyear) $date_part = "сегодня";
		if($dayOfYear==$cday-1 && $year==$cyear) $date_part = "вчера";
		if($dayOfYear==$cday-2 && $year==$cyear) $date_part = "позавчера";
		if(!$date_part) $date_part = $day." ".Datehelper::getMonthName2($month);
		if($year!=$cyear) 
		{
			$date_part.=" ".$year." года";
			return $date_part;
		}
		return $date_part." в ".$hour.":".$minute;
	}
	
	
	static function fancyBefore($dt)
	{
		$dt = time()-$dt;
		
		$months = $dt / (30*86400);
		$m = intval($months);
		
		$days = $dt / 86400;
		$d = intval($days);
		
		$hours = $dt / 3600;
		$h = intval($hours);
		
		$minutes = $dt / 60;
		$min = intval($minutes);
		
		if($days<1)
		{
			if($hours>=1) return $h.' '.pluralForm($h,'час','часа','часов');
			else 
			if($minutes>=1) return $min.' '.pluralForm($min,'минуту','минуты','минут');
			else
			return "1 минуту";
		}
		if($days>=1 && $days<31)
		{
			return $d.' '.pluralForm($d,'день','дня','дней');
		}
		
		if($m==0) $m=1;
		return $m.' '.pluralForm($m,'месяц','месяца','месяцев');
	}
	
	
    static public function fancyPeriod($dt)
	{
		$months = $dt / (30 * 86400);
		$m = intval($months);
		
		$days = $dt / 86400;
		$d = intval($days);
		
		$hours = $dt / 3600;
		$h = intval($hours);
		
		$minutes = $dt / 60;
		$min = intval($minutes);
		
		if($days<1)
		{
			if($hours>=1) return $h.' '.pluralForm($h,'час','часа','часов');
			else 
			if($minutes>=1) return $min.' '.pluralForm($min,'минута','минуты','минут');
			else
			return $dt.' '.pluralForm($dt,'секунда','секунды','секунд');
		}
		if($days>=1 && $days<31)
		{
			return $d.' '.pluralForm($d,'день','дня','дней');
		}
		if($m==0) $m=1;
		return $m.' '.pluralForm($m,'месяц','месяца','месяцев');
	}
	
	
	static function simpleDate($dt)
	{
		$day = date("j",$dt);
		$year = date("Y",$dt);
		$month = date("m",$dt);
		return $day.'.'.$month.'.'.$year;
	}
	
	static function simpleDateTime($dt)
	{
		$day = date("j",$dt);
		$year = date("Y",$dt);
		$month = date("m",$dt);
		$hour = date("G",$dt);
		$minute = date("i",$dt);
		return $day.'.'.$month.'.'.$year.' '.$hour.':'.$minute;
	}
	
	static function pickerDate($dt)
	{
		$day = date("d",$dt);
		$year = date("Y",$dt);
		$month = date("m",$dt);
		return $day.'.'.$month.'.'.$year;
	}
	
	static function rusDate($dt)
	{
		$day = date("j",$dt);
		$year = date("Y",$dt);
		$month = Datehelper::getMonthName2(date("n",$dt));
		return $day.' '.$month.' '.$year;
	}
	
	
	static function newsDate($dt)
	{
		$today = self::rusDate(time());
		$yesterday = self::rusDate(time()-86400);
		$str = self::rusDate($dt);
		if($str==$today) return 'сегодня';
		if($str==$yesterday) return 'вчера';
		return $str;
	}
	
	
	static function rusDatetime($dt=-1)
	{
		if($dt==-1) $dt=time();
		$day = date("j",$dt);
		$year = date("Y",$dt);
		$hour = date("G",$dt);
		$minute = date("i",$dt);
		$month = Datehelper::getMonthName2(date("n",$dt));
		return $day.' '.$month.' '.$year.', '.$hour.':'.$minute;
	}
	
	static function mailDatetime($dt)
	{
		$day = date("j",$dt);
		$year = date("Y",$dt);
		$month = date("m",$dt);
		$hour = date("G",$dt);
		$minute = date("i",$dt);
		return $day.'.'.$month.'.'.$year.' '.$hour.':'.$minute;
	}
	
	static function rusDayMonth($dt)
	{
		$day = date("j",$dt);
		$month = Datehelper::getMonthName2(date("n",$dt));
		return $day.' '.$month;
	}
	
}